package com.mdd.validate;

import com.alibaba.fastjson.annotation.JSONField;
import lombok.Data;

import java.util.List;

/**
 * TODO
 * <p>
 * {@code @Description}
 *
 * @Author 幻速
 * {@code @Date} 2023/11/2 10:38
 **/
@Data
public class FreezeAppOrder {
    /**
     * String	必选	64
     * 商户授权资金订单号。
     * 商家自定义需保证在商户端不重复。仅支持字母、数字、下划线。
     * 8077735255938023
     */
    @JSONField(name = "out_order_no")
    private String outOrderNo;
    /**
     * String	必选	64
     * 商户本次资金操作的请求流水号，用于标示请求流水的唯一性。
     * 可与out_order_no相同，仅支持字母、数字、下划线。
     * 8077735255938032
     */
    @JSONField(name = "out_request_no")
    private String outRequestNo;
    /**
     * String	必选	100
     * 订单标题。
     * 业务订单的简单描述，如商品名称等
     * XX租车押金
     */
    @JSONField(name = "orderTitle")
    private String orderTitle;
    /**
     * Price	必选	11
     * 需要冻结的金额，单位为：元（人民币），精确到小数点后两位。
     * 取值范围：[0.01,100000000.00]
     * 0.01
     */
    private Double amount;
    /**
     * String	必选	32
     * 销售产品码。
     * 预授权支付产品固定为 PREAUTH_PAY
     * PREAUTH_PAY
     */
    @JSONField(name = "product_code")
    private String productCode="PREAUTH_PAY";
    /**
     * String	可选	32
     * 收款账户的支付宝用户号。
     * 以2088开头的16位纯数字，如果传入则会校验该账号是否具备当前商户收款权限，如果商户希望用户能够使用花呗，则用户号(payee_user_id)和登录号(payee_logon_id)两者必须传入其一
     * 2088102000275795
     */
    @JSONField(name = "payee_user_id")
    private String payeeUserId;
    /**
     * String	可选	100
     * 收款账户的支付宝登录号（email或手机号）。
     * 如果传入则会校验该登录号对应的账号是否具备当前商户收款权限，如果商户希望用户能够使用花呗，则用户号(payee_user_id)和登录号(payee_logon_id)两者必须传入其一
     * 159****5620
     */
    @JSONField(name = "payee_logon_id")
    private String payeeLogonId;
    /**
     * String	可选	5
     * 预授权订单相对超时时间。从商户客户端请求时间开始计算。
     * 预授权订单允许的最晚授权时间，逾期将关闭该笔订单。取值范围：1m～15d。m-分钟，h-小时，d-天。 该参数数值不接受小数点， 如 1.5h，可转换为90m。
     * 默认为15m。
     * 2d
     */
    @JSONField(name = "pay_timeout")
    private String payTimeout;
    /**
     * String	可选	5
     * 预授权订单相对超时时间。从商户客户端请求时间开始计算。
     * 预授权订单允许的最晚授权时间，逾期将关闭该笔订单。取值范围：1m～15d。m-分钟，h-小时，d-天。 该参数数值不接受小数点， 如 1.5h，可转换为90m。
     * 默认为15m。
     * 2d
     */
    @JSONField(name = "timeout_express")
    private String timeoutExpress;
    /**
     * String	可选	128
     * 无特殊需要请勿传入；商户可用该参数指定支付渠道。
     * 传入后用户仅能使用列表中的渠道进行支付，目前支持三种渠道，余额宝（MONEY_FUND）、花呗（PCREDIT_PAY）以及芝麻信用（CREDITZHIMA）。与禁用支付渠道不可同时传入
     * [{"payChannelType":"PCREDIT_PAY"},{"payChannelType":"MONEY_FUND"}]
     */
    @JSONField(name = "enable_pay_channels")
    private String enablePayChannels;
    /**
     * String	可选	128
     * 无特殊需要请勿传入；商户可用该参数禁用支付渠道。
     * 传入后用户不可使用列表中的渠道进行支付，目前支持两种禁用渠道：信用卡快捷（OPTIMIZED_MOTO）、信用卡卡通（BIGAMOUNT_CREDIT_CARTOON）。与可用支付渠道不能同时传入
     * [{"payChannelType":"OPTIMIZED_MOTO"},{"payChannelType":"BIGAMOUNT_CREDIT_CARTOON"}]
     */
    @JSONField(name = "disable_pay_channels")
    private String disablePayChannels;
    /**
     * String	可选	300
     * 无特殊需要请勿传入；买家实名信息。
     * 传入后支付宝会比对买家在支付宝端的实名信息。包含两个可选key：
     * 1.identity_hash，买家姓名拼接身份证号后，使用SHA256摘要方式与UTF8编码后的hash值，返回的十六进制字符串，例如 “张三4566498798498498498498”对应的identity_hash应为“acc2b92ffc5ed9b472faa19748f10045c30434132784f774b00216a56b8841c6”
     * 2.alipay_user_id，买家uid
     * {"identity_hash":"acc2b92ffc5ed9b472faa19748f10045c30434132784f774b00216a56b8841c6"}
     */
    @JSONField(name = "identity_params")
    private String identityParams;
    /**
     * String	可选	300
     * 业务扩展参数，用于特定业务信息的传递，json格式。
     * 1、category，信用类目，信用预授权场景必传，具体类目信息见 <a href="https://opendocs.alipay.com/open/10719">...</a>；
     * 2、serviceId，信用服务id，信用预授权场景必传，需要联系芝麻客服获取，<a href="https://cshall.alipay.com/enterprise/index.htm?sourceId=pc_zhima">...</a>（右上角“有问题点我”进入咨询）；
     * 3、creditExtInfo，信用参数，可选，如有需要请与芝麻约定后传入，信用服务说明见https://opendocs.alipay.com/open/11157/qlsxya
     * {"category":"CHARGE_PILE_CAR","serviceId":"2020042800000000000001450466"}
     */
    @JSONField(name = "extra_param")
    private String extraParam;
    /**
     * String	可选	1024
     * 业务参数，如风控参数outRiskInfo等。
     * {"outRiskInfo":"{\"mcCreateTradeTime\":\"2022-03-11 12:46:09\",\"extraAccountCertnoLastSix\":\"000011\",\"mobileOperatingPlatform\":\"ios\",\"sysVersion\":\"15.4.2\",\"mcCreateTradeIp\":\"11.110.111.43\"}"}
     */
    @JSONField(name = "business_params")
    private String businessParams;
    /**
     * String	可选	128
     * 场景码，用于区分预授权不同业务场景。如：当面预授权通用场景（O2O_AUTH_COMMON_SCENE）、支付宝预授权通用场景（ONLINE_AUTH_COMMON_SCENE）、境外当面预授权通用场景（OVERSEAS_O2O_AUTH_COMMON_SCENE）、境外支付预授权通用场景（OVERSEAS_ONLINE_AUTH_COMMON_SCENE）等
     * OVERSEAS_ONLINE_AUTH_COMMON_SCENE
     */
    @JSONField(name = "scene_code")
    private String sceneCode="OVERSEAS_ONLINE_AUTH_COMMON_SCENE";
    /**
     * String	可选	8
     * 标价币种, amount 对应的币种单位。支持澳元：AUD, 新西兰元：NZD, 台币：TWD, 美元：USD, 欧元：EUR, 英镑：GBP, 人民币：CNY
     * USD
     */
    @JSONField(name = "trans_currency")
    private String transCurrency="CNY";
    /**
     * String	可选	8
     * 商户指定的结算币种。支持澳元：AUD, 新西兰元：NZD, 台币：TWD, 美元：USD, 欧元：EUR, 英镑：GBP
     * USD
     */
    @JSONField(name = "settle_currency")
    private String settleCurrency="CNY";
    /**
     * String	特殊可选	32
     * 免押受理台模式，使用免押产品必传该字段。根据免押不同业务模式将开通受理台区分三种模式，商家可根据调用预授权冻结接口传入的参数决定该笔免押订单选择哪种受理台模式。不同受理台模式需要传入不同参数，其中：POSTPAY 表示后付金额已知，POSTPAY_UNCERTAIN 表示后付金额未知，DEPOSIT_ONLY 表示纯免押。
     * 具体规则参考文档：<a href="https://opendocs.alipay.com/b/08tf3t?pathHash=d67d7545">...</a>
     * 枚举值
     * 后付金额已知: POSTPAY
     * 后付金额未知: POSTPAY_UNCERTAIN
     * 纯免押: DEPOSIT_ONLY
     * POSTPAY
     */
    @JSONField(name = "deposit_product_mode")
    private String depositProductMode="POSTPAY_UNCERTAIN";
    /**
     * 特殊可选
     * 后付费项目， 有付费项目时需要传入该字段。不同受理台模式需要传入不同参数，后付费项目名称和计费说明需要通过校验规则，同时计费说明将展示在开通受理台上。当受理台模式（deposit_product_mode）传入POSTPAY 时，后付费项目名称（name）、金额（amount）必传，计费说明（description）选传；当传入 POSTPAY_UNCERTAIN 时，后付费项目名称（name）、计费说明（description）必传，金额（amount）不传。
     * 具体规则参考文档：<a href="https://opendocs.alipay.com/b/08tf3t?pathHash=d67d7545">...</a>
     */
    @JSONField(name = "post_payments")
    private List<PostPayment> postPayments;

    @Data
    public static class PostPayment {
        /**
         * String	特殊可选	32
         * 后付费项目名称
         * 租金
         */
        private String name;
        /**
         * String	特殊可选	11
         * 后付费金额，单位为：元（人民币），精确到小数点后两位。
         * 0.01
         */
        private String amount;
        /**
         * String	可选	64
         * 计费说明
         * 2元/小时，99元封顶
         */
        private String description;
    }


}
